﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using vudu.Logica.Clases;

namespace vudu.Datos.SqlServer
{
    public class SqlServerHorarioClase
    {
        Conexion conex = new Conexion();

        public List<ControladorHorarioDeClase> ConsultarTodosLosHorarios()
        {
            List<ControladorHorarioDeClase> horarios = new List<ControladorHorarioDeClase>();
            SqlCommand command = new SqlCommand();

            conex.AbrirConexionBd();
            command.Connection = conex.ObjetoConexion();
            command.CommandType = System.Data.CommandType.Text;
            command.CommandText = "SELECT diaSemana, horaInicio, horaFin, fk_Salon FROM HorarioClase";
            command.CommandTimeout = 10;

            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                ControladorHorarioDeClase horario = new ControladorHorarioDeClase();
                horario.Dia = reader["diaSemana"].ToString();
                horario.HoraInicio = reader.GetDateTime(1);
                horario.HoraFin = reader.GetDateTime(2);
                horario.SalonDeClase.NumeroSalon = reader.GetInt32(3);
                horarios.Add(horario);

            }
            reader.Close();
            conex.CerrarConexionBd();
            return horarios;
        }

        public List<ControladorHorarioDeClase> ConsultarTodosLosHorariosDeSeccion(String idSeccion)
        {
            List<ControladorHorarioDeClase> horarios = new List<ControladorHorarioDeClase>();
            SqlCommand command = new SqlCommand();

            conex.AbrirConexionBd();
            command.Connection = conex.ObjetoConexion();
            command.CommandType = System.Data.CommandType.Text;
            command.CommandText = "SELECT id_Horario, diaSemana, horaInicio, horaFin, fk_Salon FROM HorarioClase Where fk_SeccionMateria =" + idSeccion;
            command.CommandTimeout = 10;

            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                ControladorHorarioDeClase horario = new ControladorHorarioDeClase();
                horario.IdHorarioClase = reader.GetInt32(0);
                horario.Dia = reader["diaSemana"].ToString();
                horario.HoraInicio = reader.GetDateTime(2);
                horario.HoraFin = reader.GetDateTime(3);
                horario.SalonDeClase.NumeroSalon = reader.GetInt32(4);
                horarios.Add(horario);

            }
            reader.Close();
            conex.CerrarConexionBd();
            foreach (ControladorHorarioDeClase h in horarios)
            {
                h.SalonDeClase = new SqlServerSalon().ConsultarSalon(h.SalonDeClase.NumeroSalon.ToString());
            }
            return horarios;
        }

        public bool AgregarHorarioSeccionMateria(ControladorHorarioDeClase horario, String idSeccion)
        {
            SqlCommand comando = new SqlCommand();
            String _hInicio = horario.HoraInicio.Hour + ":" + horario.HoraInicio.Minute;
            String _hFin = horario.HoraFin.Hour + ":" + horario.HoraFin.Minute;
            String sql = "INSERT INTO HorarioClase(diaSemana,horaInicio,horaFin,fk_Salon, fk_SeccionMateria) ";
            sql = sql + "VALUES ('" + horario.Dia + "','" + _hInicio + "','" + _hFin + "'," + horario.SalonDeClase.NumeroSalon.ToString() + ", " + idSeccion + ")";
            comando.CommandText = sql;
            comando.Connection = conex.ObjetoConexion();
            try
            {
                conex.AbrirConexionBd();
                comando.ExecuteNonQuery();
                return true;
            }
            catch (SqlException ex)
            {
                return false;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally
            {
                conex.CerrarConexionBd();
            }
        }

        //Metodo que elimina los horarios por seccion
        public int EliminarHorarioPorSeccion(String idseccion)
        {
            SqlCommand comando = new SqlCommand();
            String sql = "DELETE FROM HorarioClase WHERE fk_SeccionMateria = " + idseccion;
            comando.CommandText = sql;
            comando.Connection = conex.ObjetoConexion();
            try
            {
                conex.AbrirConexionBd();
                comando.ExecuteNonQuery();
                return 1;
            }
            catch (SqlException)
            {
                return 0;
            }
            catch (Exception)
            {
                return 0;
            }
            finally
            {
                conex.CerrarConexionBd();
            }
        }

        public bool ModificarHorarioSeccion(List<String[]> campos, ControladorHorarioDeClase horario)
        {
            SqlCommand comando = new SqlCommand();
            String sql = null;
            bool estatusModificacion = false;
            foreach (String[] c in campos)
            {
                String campo = c[1];
                String valor = c[2];
                if (campo.Contains("HoraInicio"))
                {
                    sql = "update HorarioClase set horaInicio = '" + valor + "' where id_Horario = " + horario.IdHorarioClase;
                }
                else if (campo.Contains("HoraFin"))
                {
                    sql = "update HorarioClase set horaFin = '" + valor + "' where id_Horario = " + horario.IdHorarioClase;
                }
                else if (campo.Contains("Dia"))
                {
                    sql = "update HorarioClase set diaSemana = '" + valor + "' where id_Horario = " + horario.IdHorarioClase;
                }
                else if (campo.Contains("Salon"))
                {
                    sql = "update HorarioClase set  fk_Salon = " + valor + " where id_Horario = " + horario.IdHorarioClase;
                }
                if (sql == null)
                {
                    estatusModificacion = false;
                }
                else
                {
                    comando.CommandText = sql;
                    comando.Connection = conex.ObjetoConexion();
                    try
                    {
                        conex.AbrirConexionBd();
                        comando.ExecuteNonQuery();
                        estatusModificacion = true;
                    }
                    catch (SqlException)
                    {
                        estatusModificacion = false;
                    }
                    catch (Exception)
                    {
                        estatusModificacion = false;
                    }
                    finally
                    {
                        conex.CerrarConexionBd();
                    }
                }
                if (estatusModificacion == false)
                {
                    return estatusModificacion;
                }
            }
            return estatusModificacion;
        }
    } //class
}